package com.local.goods.service;

import com.local.common.util.PageResultUtil;
import com.local.common.util.ResultUtil;
import com.local.goods.pojo.Goods;
import com.local.goods.pojo.GoodsESDoc;
import com.local.goods.pojo.GoodsESRequestParam;

import java.io.IOException;
import java.util.List;

public interface GoodsService {

    /**
     * 查询商品列表，支持翻页和搜索
     * @param page
     * @param limit
     * @param sort
     * @param order
     * @return
     */
    public PageResultUtil<Goods> findGoodsList(Integer page, Integer limit, String sort, String order, String goodsName, Integer goodsSellStatus);

    /**
     * 新增
     * @param goods
     * @return
     */
    public Integer save(Goods goods);

    /**
     * 通过id查询
     * @param goodsId
     * @return
     */
    public Goods getById(Integer goodsId);


    /**
     * 修改
     * @param goods
     * @return
     */
    public Integer update(Goods goods);

    /**
     * 更新状态，上架和下架
     * @param ids
     * @param goodsSellStatus
     * @param updateUser
     * @param updateTime
     * @return
     */
    public Integer updateStatus(Integer[] ids, Integer goodsSellStatus, Integer updateUser, String updateTime);


    /**
     * 通过category id查询商品列表
     * @param categoryId
     * @param page
     * @param limit
     * @param sort
     * @param order
     * @param goodsSellStatus
     * @return
     */
    public PageResultUtil<Goods> findGoodsListByCategoryId(Integer categoryId, Integer page, Integer limit, String sort, String order, Integer goodsSellStatus);

    /**
     * 通过id查询商品，不包括“商品详情”字段
     * @param id
     * @return
     */
    public Goods getSimpleById(Integer id);


    /**
     * 通过ids批量查询商品列表
     * @param goodsIds
     * @return
     */
    public List<Goods> getGoodsListByIds(List<Integer> goodsIds);

    /**
     * 批量更新商品的库存（当购物车生成订单的时候）
     * @param goodsStockNumList
     * @return
     */
    public ResultUtil updateGoodsStockNum(List<Goods> goodsStockNumList);

    /**
     * 通过关键词keywords对goods进行es搜索
     * @param param
     * @return
     */
    public PageResultUtil<GoodsESDoc> search(GoodsESRequestParam param);


    /**
     * 初始化es中商品goods文档的数据，将mysql中goods表的数据，同步到es中goods文档
     * @return
     */
    public Integer initSearchDocData(Integer page);


    /**
     * 搜索的自动补齐，即搜索建议
     * @param keywords
     * @return
     */
    public List<String> searchSuggestion(String keywords);


    /**
     * 新增或更新goods的es文档
     * @param idString
     */
    public void updateSearchDocData(String idString);

    /**
     * 删除goods的es文档
     * @param idString
     */
    public void deleteSearchDocData(String idString);
}
